// 购物车相关数据
import { getCartList, upadataGoods, delCart } from "@/api/addcart";
export default {
  namespaced: true,
  state() {
    return {
      cartList: [],
    };
  },
  mutations: {
    // 提供一个可以接收 actions里 传来的数据的方法
    setShop(state, newList) {
      state.cartList = newList;
    },
    // 选中状态
    toggleCheck(state, id) {
      const item = state.cartList.find((v) => v.goods_id === id);
      if (!item) {
        console.warn(`商品ID为 ${id} 的商品不存在`);
        return;
      }
      item.isChecked = !item.isChecked;
    },
    // 全选状态
    allChecked(state, isChecked) {
      state.cartList.forEach((v) => (v.isChecked = isChecked));
    },
    // 更新商品加减数量
    updataDo(state, obj) {
      const item = state.cartList.find(
        (item) => item.goods_id === obj.goods_id
      );
      item.goods_num = obj.goods_num;
    },
  },
  actions: {
    async getshopData(context) {
      const { data } = await getCartList();
      data.list.forEach((v) => {
        v.isChecked = false;
      });
      context.commit("setShop", data.list);
    },
    // 发送请求
    async changeCount(context, obj) {
      const { goods_num, goods_id, goods_sku_id } = obj;
      //   先本地更新 再后台更新
      context.commit("updataDo", obj);
      const res = await upadataGoods(goods_id, goods_num, goods_sku_id);
      console.log(res, "@@@@@@");
    },

    // 删除商品
    async delShop(context) {
      // 找到选中的那一项 然后发请求删除
      const selItem = context.getters.selCartList;
      const selIdArr = selItem.map((v) => v.id);
      await delCart(selIdArr);
      //   删完之后再次拉取数据即可
      context.dispatch("getshopData");
    },
  },
  getters: {
    // 求所有累加商品的总数
    cartTotal(state) {
      return state.cartList.reduce((sum, item) => sum + item.goods_num, 0);
    },

    // 选中的商品项
    selCartList(state) {
      return state.cartList.filter((v) => v.isChecked);
    },

    //选中的总数
    selCount(state, getters) {
      return getters.selCartList.reduce((sum, item) => sum + item.goods_num, 0);
    },
    //选中的总价
    selPrice(state, getters) {
      return getters.selCartList
        .reduce((sum, item) => {
          return sum + item.goods_num * item.goods.goods_price_min;
        }, 0)
        .toFixed(2);
    },
    // 全选功能
    isAllchecked(state) {
      // 如果 cartList 为空，则返回 false
      if (state.cartList.length === 0) {
        return false;
      }
      return state.cartList.every((item) => item.isChecked);
    },
  },
};
